package com.hk.employeemanagementsystem.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hk.employeemanagementsystem.entity.JobLevelEntity;
import com.hk.employeemanagementsystem.mapper.JobLevelEntityMapper;
import com.hk.employeemanagementsystem.service.JobLevelEntityService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author by 何坤
 * @Classname JobLevelEntityServiceImpl
 * @Description TODO
 * @Date 2020/1/7 22:20
 */
@Service
public class JobLevelEntityServiceImpl implements JobLevelEntityService {

    private Logger logger = LoggerFactory.getLogger(JobLevelEntityServiceImpl.class);

    @Resource
    private RedisTemplate<String, JobLevelEntity> redisTemplate;

    @Resource
    private JobLevelEntityMapper jobLevelEntityMapper;

    @Cacheable(value = "jobLevel", key = "'all'", unless = "#result==null || #result.size()==0")
    @Override
    public List<JobLevelEntity> selectAllJobLevel() {
        return jobLevelEntityMapper.selectList(null);
    }

    @CachePut(value = "jobLevel", key = "'all'", unless = "#result==null || #result.size()==0")
    @Override
    public List<JobLevelEntity> updateJobLevel(JobLevelEntity jobLevelEntity) {
        jobLevelEntityMapper.updateById(jobLevelEntity);
        return jobLevelEntityMapper.selectList(null);
    }

    @CachePut(value = "jobLevel", key = "'all'", unless = "#result==null || #result.size()==0")
    @Override
    public List<JobLevelEntity> saveJobLevel(JobLevelEntity jobLevelEntity) {
        jobLevelEntityMapper.insert(jobLevelEntity);
        return jobLevelEntityMapper.selectList(null);
    }

    @CachePut(value = "jobLevel", key = "'all'", unless = "#result==null || #result.size()==0")
    @Override
    public List<JobLevelEntity> deleteJobLevel(List<String> ids) {
        jobLevelEntityMapper.deleteBatchIds(ids);
        return jobLevelEntityMapper.selectList(null);
    }

    @Override
    public Boolean validateJobLevelName(String name, Integer id) {
        if (id == null) {
            return jobLevelEntityMapper.selectOne(new QueryWrapper<JobLevelEntity>().eq("job_name", name)) == null ? false : true;
        } else {
            return jobLevelEntityMapper.selectOne(new QueryWrapper<JobLevelEntity>().eq("job_name", name).ne("job_id", id)) == null ? false : true;
        }
    }
}
